/*
Socket（套接字）是计算机之间进行通信的一种约定或方式。通过Socket，可以实现两台计算机之间通信。是操作系统底层提供的一项通信技术，支持TCP和UDP。
java对Socket底层提供了一套完整的封装，可以通过java来实现socket通信。
要实现socket通信，必须要同时有服务端和客户端，服务端等待连接，客户端主动去连接.
我们先编写服务端
 */
package MySocket;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {
    public static void main(String[] args) {
        try{
            ServerSocket serverSocket = new ServerSocket(10086);  //创建ServerSocket对象，传入要监听的端口
            System.out.println("正在等待客户端连接");
            Socket socket = serverSocket.accept();  //使用ServerSocket的accept()方法创建一个socket对象，accept()等待连接的时候，线程会阻塞，直到有客户端连接
            System.out.println("客户端已连接，客户端IP地址是" + socket.getInetAddress().getHostAddress());
            //通过Socket对象的getInetAddress()方法获取对端地址，返回的是个对象，如果想打印出String，就用.getHostAddress()
            socket.close(); //使用完成后记得关闭释放端口，不关闭会一直占用端口。
            // 但如果把ServerSocket部分写到try()括号里面try with resource，就可以自动关闭，不用手动关闭了。Socket继承了autocloseable()
        }catch (IOException e){
            e.printStackTrace();
        }

        //实际上就是一个TCP连接过程（三次握手）及断开过程（四次挥手）。一旦TCP连接建立，服务端和客户端之间就可以相互发送数据，直到一方主动关闭。


    }
}
